golang 来自Scratch的容器 - 在Go中实现简单的容器化应用程序 Posted 2021-05-24
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 来自Scratch的容器 - 在Go中实现简单的容器化应用程序相关的知识,希望对你有一定的参考价值。
package main
import (
"fmt"
"os"
"os/exec"
"syscall"
)
func main() {
switch os.Args[1] {
case "run":
parent()
case "child":
child()
default:
panic("wat should I do")
}
}
func parent() {
cmd := exec.Command("/proc/self/exe", append([]string{"child"}, os.Args[2:]...)...)
cmd.SysProcAttr = &syscall.SysProcAttr{
Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWPID | syscall.CLONE_NEWNS,
}
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
fmt.Println("ERROR", err)
os.Exit(1)
}
}
func child() {
must(syscall.Mount("rootfs", "rootfs", "", syscall.MS_BIND, ""))
must(os.MkdirAll("rootfs/oldrootfs", 0700))
must(syscall.PivotRoot("rootfs", "rootfs/oldrootfs"))
must(os.Chdir("/"))
cmd := exec.Command(os.Args[2], os.Args[3:]...)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
fmt.Println("ERROR", err)
os.Exit(1)
}
}
func must(err error) {
if err != nil {
panic(err)
}
}
golang go中的样本整数struct容器
package main
//go program to implement a portable VM
import (
"fmt"
)
//int object struct
type Int struct {
value []int
}
//constructor for int struct
func CreateInt(val int) Int {
num := Int{value:[]int{val}}
return num
}
//adds an integer to the struct
func (in Int) Addto(amount int) {
in.value[0] += amount
}
func main(){
tester := CreateInt(8)
tester.Addto(7)
fmt.Println(tester)
//{[15]}
fmt.Println(len(tester.value))
//1
}
以上是关于golang 来自Scratch的容器 - 在Go中实现简单的容器化应用程序的主要内容,如果未能解决你的问题,请参考以下文章
golang go中的样本整数struct容器
Golang Kubenetes容器多集群平台开发实践
Go语言入门150题L1-066 猫是液体 (5 分) Go语言 | Golang
go-elasticsearch 来自官当的 golang es client
Golang basic_leaming2 语言容器
Golang basic_leaming2 语言容器