// 声明并初始化一个变量 var m int = 10 // 声明初始化多个变量 var i, j, k = 1, 2, 3 // 多个变量的声明(注意小括号的使用) var( no int name string ) // 声明时不指明类型,通过初始化值来推导 var b = true // bool型 // := 隐含声明变量并赋值 str := "mimvp.com" // 等价于var str string = "mimvp.com"
// = 使用必须使用先var声明例如: var a a = 100 // 或 var b = 100 // 或 var c int = 100 // := 是声明并赋值,并且系统自动推断类型,不需要var关键字 d := 100 // Go中有一个特殊的变量下划线"_" 表示任何赋给它的值将被丢弃 _, Ret:= 2, 3 // 2赋值被丢弃
const ( constName1 [type] = val1 constName2 [type] = val2 )
/**
* mimvp.com
* 2017.1.20
*/
// 声明当前文件所属的包名,main是一个可独立运行的包,编译后会生成可执行文件
package main
import "fmt" // 导入包
var id = 123456
/*
id2 := 654321
// 在函数外用 := ,编译时会出现错误,局部变量声明应在函数内部
// non-declaration statement outside function body
*/
const PI = 3.14 // 常量声明
// 每个可独立运行的程序,都包含入口函数 main ,与其他语言相同,但无参数和返回值
func main() {
var num int
num = 100
fmt.Println(num) // 输出 100
var num1, num2 int
num1, num2 = 1, 2
fmt.Println(num1, num2) // 输出 1 2
var no1, no2 = 3, 4
fmt.Println(no1, no2) // 输出 3 4
n1, n2 := 5, 6
fmt.Println(n1, n2) // 输出 5 6
_, n := 7, 8
fmt.Println(n) // 输出 8
var (
key1 string
key2 string
)
key1, key2 = "k1", "k2"
fmt.Println(key1, key2) // 输出 k1 k2
var (
a = 9
b = 10
)
fmt.Println(a, b) // 输出 9 10
fmt.Println(id) // 输出 123456
fmt.Println(PI) // 输出 3.14
/*
PI = 3.1415
// 改变常量的值,编译会出现错误
// cannot assign to PI
// cannot use 3.1415 (type float64) as type ideal in assignment
*/
}
func GetMsg(i int) (str string) {
fmt.Println(i)
str = "hello mimvp.com"
return str
}
<span style="color:#0000FF;">vim mimvp_func.go</span>
func GetMsg(i int) (str string, err string) {
fmt.Println(i)
str = "hello mimvp.com"
err = "no err"
return str, err
}
func main() {
fmt.Println(GetMsg(100))
}
$ go build mimvp_func.go $ ./mimvp_func 100 hello mimvp.com no err
func ReadFile(filePath string)(){
file.Open(filePath)
defer file.Close()
if true {
file.Read()
} else {
return false
}
}
package main
import "fmt"
func main() {
f()
fmt.Println("Returned normally from f.")
}
func f() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
}
}()
fmt.Println("Calling g.")
g(0)
fmt.Println("Returned normally from g.")
}
func g(i int) {
if i > 3 {
fmt.Println("Panicking!")
panic(fmt.Sprintf("%v", i))
}
defer fmt.Println("Defer in g", i)
fmt.Println("Printing in g", i)
g(i + 1)
}
$ ./mimvp-try-catch Calling g. Printing in g 0 Printing in g 1 Printing in g 2 Printing in g 3 Panicking! Defer in g 3 Defer in g 2 Defer in g 1 Defer in g 0 Recovered in f 4 Returned normally from f.
package main
import (
"net"
"fmt"
"io"
"bytes"
"encoding/binary"
)
type Methods struct{
ver, nmethods uint8
methods uint8
}
type sock5cmd struct{
ver, cmd, rsv, atyp uint8
dst [255]uint8
}
type proxyCoder struct {
conn net.Conn
}
func (c *proxyCoder) readMethods() Methods {
var m Methods
b := make([]byte, 1024)
n, err := c.conn.Read(b)
if err != nil && err != io.EOF { panic(err) }
buf := bytes.NewBuffer(b[0:n])
err = binary.Read(buf, binary.LittleEndian, &m.ver)
if err != nil {
fmt.Println("binary.Read failed:", err)
}
err = binary.Read(buf, binary.LittleEndian, &m.nmethods)
if err != nil {
fmt.Println("binary.Read failed:", err)
}
err = binary.Read(buf, binary.BigEndian, &m.methods)
if err != nil {
fmt.Println("binary.Read failed:", err)
}
return m
}
func (c *proxyCoder) returnMethod() {
buf := make([]byte, 2)
buf[0] = 5
buf[1] = 0
c.conn.Write(buf)
fmt.Println(buf)
}
func (c *proxyCoder) serve() {
buf := make([]byte, 128)
n, err := c.conn.Read(buf)
if err != nil && err != io.EOF { panic(err) }
fmt.Println(buf[:n])
var s string
var t string
var i int
if(buf[3] == 3){//domail
for i = 4; i < n-2; i++ {
s += fmt.Sprintf("%c", buf[i])
}
} else {//ip4 or ip6
s += fmt.Sprintf("%d", buf[4])
for i = 5; i < n-2; i++ {
s += fmt.Sprintf(".%d", buf[i])
}
}
p := make([]byte, 2)
var port uint16
p[1] = buf[n-1]
p[0] = buf[n-2]
b := bytes.NewBuffer(p)
err = binary.Read(b, binary.BigEndian, &port)
if err != nil {
fmt.Println("binary.Read failed:", err)
}
s += fmt.Sprintf(":%d", port)
switch buf[1] {
case 1://TCP
t = "tcp"
case 2://BIND
case 3://UDP
t = "udp"
}
conn, err := net.Dial(t, s)
if err != nil {
fmt.Printf("%s connect error %s\n", t, s)
buf[1] = 4
c.conn.Write(buf[:n])
c.conn.Close()
return
}
buf[1] = 0
c.conn.Write(buf[:n])
fmt.Printf("%s connect success %s\n", t, s)
go serv(conn, c.conn)
go serv(c.conn, conn)
}
func serv(in net.Conn, out net.Conn){
b := make([]byte, 10240)
for ;;{
n, err := in.Read(b)
if( err != nil ){
fmt.Printf("close\n")
in.Close()
out.Close()
return
}
fmt.Printf("serv %d\n", n)
out.Write(b[:n]);
}
}
type Proxy struct {
}
func NewProxy() *Proxy {
return &Proxy{}
}
var DefaultProxy = NewProxy()
func (p *Proxy) ProxyConn(conn net.Conn ){
c := &proxyCoder{conn}
m := c.readMethods()
fmt.Println(m)
c.returnMethod()
c.serve()
}
func handleConnection(conn net.Conn){
buf := make([]byte, 1024)
n, err := conn.Read(buf)
if err != nil && err != io.EOF { panic(err) }
fmt.Println(buf[:n])
//answer
buf[0] = 5
buf[1] = 0
conn.Write(buf[:2])
fmt.Println(buf[:2])
//serve
n, err = conn.Read(buf)
if err != nil && err != io.EOF { panic(err) }
fmt.Println(buf[:n])
conn.Close()
}
func main() {
ln, err := net.Listen("tcp", ":1080")
if err != nil {
fmt.Printf("bind error\n")
return
}
for {
conn, err := ln.Accept()
if err != nil {
fmt.Printf("accept error\n")
continue
}
go DefaultProxy.ProxyConn(conn)
//go handleConnection(conn)
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有