Ecosyste.ms: Repos
An open API service providing repository metadata for many open source software ecosystems.
Package Usage: go: libvirt.org/libvirt-go
Package libvirt provides a Go binding to the libvirt C library
Through conditional compilation it supports libvirt versions 1.2.0 onwards.
This is done automatically, with no requirement to use magic Go build tags.
If an API was not available in the particular version of libvirt this package
was built against, an error will be returned with a code of ERR_NO_SUPPORT.
This is the same code seen if using a new libvirt library to talk to an old
libvirtd lacking the API, or if a hypervisor does not support a given feature,
so an application can easily handle all scenarios together.
The Go binding is a fairly direct mapping of the underling C API which seeks
to maximise the use of the Go type system to allow strong compiler type
checking. The following rules describe how APIs/constants are mapped from C
to Go
For structs, the 'vir' prefix and 'Ptr' suffix are removed from the name.
e.g. virConnectPtr in C becomes 'Connect' in Go.
For structs which are reference counted at the C level, it is neccessary to
explicitly release the reference at the Go level. e.g. if a Go method returns
a '* Domain' struct, it is neccessary to call 'Free' on this when no longer
required. The use of 'defer' is recommended for this purpose
If multiple goroutines are using the same libvirt object struct, it may
not be possible to determine which goroutine should call 'Free'. In such
scenarios each new goroutine should call 'Ref' to obtain a private reference
on the underlying C struct. All goroutines can call 'Free' unconditionally
with the final one causing the release of the C object.
For methods, the 'vir' prefix and object name prefix are remove from the name.
The C functions become methods with an object receiver. e.g.
'virDomainScreenshot' in C becomes 'Screenshot' with a 'Domain *' receiver.
For methods which accept a 'unsigned int flags' parameter in the C level,
the corresponding Go parameter will be a named type corresponding to the
C enum that defines the valid flags. For example, the ListAllDomains
method takes a 'flags ConnectListAllDomainsFlags' parameter. If there are
not currently any flags defined for a method in the C API, then the Go
method parameter will be declared as a "flags uint32". Callers should always
pass the literal integer value 0 for such parameters, without forcing any
specific type. This will allow compatibility with future updates to the
libvirt-go binding which may replace the 'uint32' type with a enum type
at a later date.
For enums, the VIR_ prefix is removed from the name. The enums get a dedicated
type defined in Go. e.g. the VIR_NODE_SUSPEND_TARGET_MEM enum constant in C,
becomes NODE_SUSPEND_TARGET_MEM with a type of NodeSuspendTarget.
Methods accepting or returning virTypedParameter arrays in C will map the
parameters into a Go struct. The struct will contain two fields for each
possible parameter. One boolean field with a suffix of 'Set' indicates whether
the parameter has a value set, and the other custom typed field provides the
parameter value. This makes it possible to distinguish a parameter with a
default value of '0' from a parameter which is 0 because it isn't supported by
the hypervisor. If the C API defines additional typed parameters, then the
corresponding Go struct will be extended to have further fields.
e.g. the GetMemoryStats method in Go (which is backed by
virNodeGetMemoryStats in C) will return a NodeMemoryStats struct containing
the typed parameter values.
Every method that can fail will include an 'error' object as the last return
value. This will be an instance of the Error struct if an error occurred. To
check for specific libvirt error codes, it is neccessary to cast the error.
To connect to libvirt
43 versions
Latest release: about 3 years ago
12 dependent packages
View more package details: https://packages.ecosyste.ms/registries/proxy.golang.org/packages/libvirt.org/libvirt-go
View more repository details: https://repos.ecosyste.ms/hosts/GitLab.com/repositories/libvirt%2Flibvirt-go
Dependent Repos 40
proura/drlm2t
DRLM v2 testing environment- v6.4.0+incompatible go.sum
Size: 18.9 MB - Last synced: 6 months ago - Pushed: about 3 years ago
rjhimi/harvesterhci-JR
- v6.5.0+incompatible go.sum
Size: 29 MB - Last synced: about 1 month ago - Pushed: almost 2 years ago
Musaiba/Research-investigation-tools
Adrien LACOUR et Mariam CISSE- v6.5.0+incompatible theHarvester/go.sum
Size: 24 MB - Last synced: about 1 month ago - Pushed: about 1 year ago
goryszewski/libvirt-looper
- v7.4.0+incompatible go.mod
- v7.4.0+incompatible go.sum
Size: 25.4 KB - Last synced: about 1 month ago - Pushed: about 1 month ago