// 生产者:生成factor整数倍的序列
    
func Producer(factor int, out chan<- int) {
        
for i := 0; ; i++ {
            
out <- i*factor
        
}}
    
// 消费者
    
func Consumer(in <-chan int) {
        
for v := range in {
            
fmt.Println(v)
        
}}
    
func main() {
        
ch := make(chan int, 64) // 成果队列
      
go Producer(3, ch) // 生成3的倍数的序列
    
go Producer(5, ch) // 生成5的倍数的序列
        
go Consumer(ch)    // 消费生成的队列
      
// 运行一定时间后退出
        
time.Sleep(5 * time.Second)}

strcasecmp — 不区分大小写比较字符串

如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

<?php
$var1 = "Hello";
$var2 = "hello";
if (strcasecmp($var1, $var2) == 0) {
    echo '$var1 is equal to $var2 in a case-insensitive string comparison';
}
?>

在golang中使用cgo调用openssl库的md5方法,最简单的方法

package main

/*
#cgo CFLAGS: -I ./include
#cgo LDFLAGS: -L ./lib -lcrypto
#include <stdlib.h>
#include <openssl/md5.h>
*/
import "C"

import (
    "encoding/hex"
    "fmt"
    "strings"
    "unsafe"
)

func main() {

    fmt.Println("go openssl md5 demo.")
    data := []byte("const.net.cn")
    md := make([]byte, 16)
    C.MD5((*C.uchar)(unsafe.Pointer(&data[0])), C.size_t(len(data)), (*C.uchar)(unsafe.Pointer(&md[0])))
    md5Str := hex.EncodeToString(md)
    md5Str = strings.ToUpper(md5Str)
    fmt.Printf("md5Str = %s\n", md5Str)
}

输出:

go run .
go openssl md5 demo.
md5Str = FA8424A7B72EB90BF04685205ECC5760
echo -n "const.net.cn" | md5sum 
fa8424a7b72eb90bf04685205ecc5760  -

在golang中使用cgo调用openssl库的md5方法,使用MD5_Init, MD5_Update, MD5_Final.

package main

/*
#cgo CFLAGS: -I ./include
#cgo LDFLAGS: -L ./lib -lcrypto
#include <stdlib.h>
#include <openssl/md5.h>
*/
import "C"

import (
    "encoding/hex"
    "fmt"
    "strings"
    "unsafe"
)

func main() {
    var ctx C.MD5_CTX
    C.MD5_Init(&ctx)
    data := []byte("https://const.net.cn")
    C.MD5_Update(&ctx, unsafe.Pointer(&data[0]), C.size_t(len(data)))
    md := make([]byte, 16)
    C.MD5_Final((*C.uchar)(unsafe.Pointer(&md[0])), &ctx)
    md5Str := hex.EncodeToString(md)
    md5Str = strings.ToUpper(md5Str)
    fmt.Printf("md5Str = %s\n", md5Str)
}

输出:

go run .
md5Str = 682D2C63236AF6E721794B2988FC1D44
echo -n "https://const.net.cn" | md5sum 
682d2c63236af6e721794b2988fc1d44  -

在golang中使用cgo调用openssl库的md5方法,不使用var定义,使用new来定义C.MD5_CTX

package main

/*
#cgo CFLAGS: -I ./include
#cgo LDFLAGS: -L ./lib -lcrypto
#include <stdlib.h>
#include <openssl/md5.h>
*/
import "C"

import (
    "encoding/hex"
    "fmt"
    "strings"
    "unsafe"
)

func main() {
    ctx := new(C.MD5_CTX)
    C.MD5_Init(ctx)
    data := []byte("const.net.cn")
    C.MD5_Update(ctx, unsafe.Pointer(&data[0]), C.size_t(len(data)))
    md := make([]byte, 16)
    C.MD5_Final((*C.uchar)(unsafe.Pointer(&md[0])), ctx)
    md5Str := hex.EncodeToString(md)
    md5Str = strings.ToUpper(md5Str)
    fmt.Printf("md5Str = %s\n", md5Str)
}

输出:
go run .
md5Str = FA8424A7B72EB90BF04685205ECC5760
echo -n "const.net.cn" | md5sum
fa8424a7b72eb90bf04685205ecc5760 -